#include <stdio.h>

void CudaDeviceInfo() {
    int deviceId;

    cudaGetDevice(&deviceId);

    cudaDeviceProp props;
    cudaGetDeviceProperties(&props, deviceId);


    printf("Device ID: %d\n\
       *Number of SMs: %d\n\
       Compute Capability Major: %d\n\
       Compute Capability Minor: %d\n\
       memoryBusWidth: %d\n\
       *maxThreadsPerBlock: %d\n\
       maxThreadsPerMultiProcessor: %d\n\
       *totalGlobalMem: %zuM\n\
       sharedMemPerBlock: %zuKB\n\
       *sharedMemPerMultiprocessor: %zuKB\n\
       totalConstMem: %zuKB\n\
       *Warp Size: %d\n",
           deviceId,
           props.multiProcessorCount,       // sm的数量
           props.major,                   // GPU计算能力版本，表征架构，决定支持的指令集和功能
           props.minor,
           props.memoryBusWidth,            // 显存位宽
           props.maxThreadsPerBlock,           // 线程块内的线程数
           props.maxThreadsPerMultiProcessor,    // 单个SM的最大线程数
           props.totalGlobalMem / 1024 / 1024,     // 显存大小
           props.sharedMemPerBlock / 1024,          // 每个线程块内的共享内存大小
           props.sharedMemPerMultiprocessor / 1024,     // 每个SM内的共享内存大小
           props.totalConstMem / 1024,     // 常量内存的大小
           props.warpSize);                // 一个warp的大小
};

int main() {
    CudaDeviceInfo();
    return 0;
}